package com.uam.utils.file.analysis.help;

import com.uam.common.exception.UamException;
import lombok.Getter;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 文件类型枚举
 *
 * @author heguanglong
 * @date 2020-12-02
 */
public enum FileTypeEnums {

    /**
     * GEOJSON格式
     */
    GEO_JSON(1, "GEOJSON", new GeoJsonInfo()),

    /**
     * KML 文件格式
     */
    KML(2, "KML", new Kml2GeoJson()),

    /**
     * CSV 文件格式
     */
    CSV(4, "CSV", new Csv2GeoJson()),

    /**
     * SHP 文件格式
     */
    SHP(3, "SHP", new Shp2GeoJson());

    @Getter
    private Integer code;
    @Getter
    private String name;

    private File2GeoJson file2GeoJson;

    FileTypeEnums(Integer code, String name, File2GeoJson file2GeoJson) {
        this.code = code;
        this.name = name;
        this.file2GeoJson = file2GeoJson;
    }

    private static Map<Integer, File2GeoJson> file2GeoJsonMap = new ConcurrentHashMap<>();



    static {
        for (FileTypeEnums typeEnums : values()) {
            file2GeoJsonMap.put(typeEnums.getCode(), typeEnums.file2GeoJson);
        }
    }

    public static File2GeoJson toGeoJsonImpl(int code) {
        File2GeoJson geoJson=  file2GeoJsonMap.get(code);
        if(geoJson !=null){
            return geoJson;
        }
        throw UamException.paramError("code 不存在 code："+code);
    }

    public static int getCode(String typeName) {
        FileTypeEnums[] fileTypeEnums=  FileTypeEnums.values();
        int row=fileTypeEnums.length;
        for(int i=0;i<row;i++){
            FileTypeEnums f=fileTypeEnums[i];
           if(f.getName().equals(typeName.toUpperCase())){
               return f.getCode();
           }
        }
        throw UamException.paramError("文件类型不存在！");
    }
}
